﻿using CDH_Shop.Models.Database;
using CDH_Shop.Models.Good;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace CDH_Shop.Services
{
    /// <summary>
    /// 服务类 为商品相关的操作服务
    /// </summary>
    public class GoodService : IGoodService
    {
        private readonly CDH_ShopContext _db;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="db"></param>
        public GoodService(CDH_ShopContext db)
        {
            _db = db;
        }

        //1、后台商品列表接口调用
        //2、前端商品列表接口调用

        //获取商品列表 
        /// <summary>
        /// 传入条件和分页 返回商品的列表
        /// </summary>
        /// <param name="keyword"></param>
        /// <param name="cateId"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        public List<Good> GetGoodList(string keyword, int cateId, int pageIndex, int pageSize)
        {
            //实现这个接口
            var goodDB = _db.Goods.AsQueryable();

            //如果符合关键字不为空
            if (!string.IsNullOrEmpty(keyword))
                goodDB = goodDB.Where(x => x.GoodName.Contains(keyword));

            //如果符合分类Id>0
            if (cateId > 0)
                goodDB = goodDB.Where(x => x.CateId == cateId);

            return goodDB
                 //构造新的列表类型
                 .OrderByDescending(x => x.GoodId)
                 .Skip((pageIndex - 1) * pageSize)
                 .Take(pageSize)
                 .ToList();
        }
        /// <summary>
        /// 获取商品总数量
        /// </summary>
        /// <param name="keyword"></param>
        /// <param name="cateId"></param>
        /// <returns></returns>
        public int GetGoodTotal(string keyword, int cateId)
        {
            //实现这个接口
            var goodDB = _db.Goods.AsQueryable();

            //如果符合关键字不为空
            if (!string.IsNullOrEmpty(keyword))
                goodDB = goodDB.Where(x => x.GoodName.Contains(keyword));

            //如果符合分类Id>0
            if (cateId > 0)
                goodDB = goodDB.Where(x => x.CateId == cateId);

            //获取总数
            return goodDB.Count();
        }
        /// <summary>
        /// 扣除商品库存 每个商品 要扣除多少库存
        /// </summary>
        public void UpdateStock(List<OrderDetail> orderDetails)
        {
            //遍历订单明细列表
            foreach (var item in orderDetails)
            {
                //逐个商品扣除库存
                var good = _db.Goods.FirstOrDefault(x => x.GoodId == item.GoodId);
                //现在的库存 = 原来的库存 - 要购买的数量
                good.Stock = good.Stock - item.Count;
                _db.Goods.Update(good);
            }

        }
        //判断库存够不够 如果不够不能结算
        /// <summary>
        /// 判断库存
        /// </summary>
        /// <returns>1：不够库存 返回第一个不够库存的商品名称 2：够库存 返回空字符串</returns>
        public string GetStock(List<Car> cars)
        {
            //遍历订单明细列表
            foreach (var item in cars)
            {
                //逐个商品扣除库存
                var good = _db.Goods.FirstOrDefault(x => x.GoodId == item.GoodId);
                //如果 要购买的数量  大于 商品库存
                if (item.Count > good.Stock)
                    return item.GoodName;
            }
            return "";
        }
    }
}
